
package org.jbox2d.particle;

public class StackQueue<T> {

	private T[] m_buffer;
	private int m_front;
	private int m_back;
	private int m_end;

	public StackQueue () {
	}

	public void reset (T[] buffer) {
		m_buffer = buffer;
		m_front = 0;
		m_back = 0;
		m_end = buffer.length;
	}

	public void push (T task) {
		if (m_back >= m_end) {
			System.arraycopy(m_buffer, m_front, m_buffer, 0, m_back - m_front);
			m_back -= m_front;
			m_front = 0;
			if (m_back >= m_end) {
				return;
			}
		}
		m_buffer[m_back++] = task;
	}

	public T pop () {
		assert (m_front < m_back);
		return m_buffer[m_front++];
	}

	public boolean empty () {
		return m_front >= m_back;
	}

	public T front () {
		return m_buffer[m_front];
	}
}
